<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    
  </style>
</head>
<body>
  
</body>
<script>

  // const p1 = ajax("异步1");
  // const p2 = ajax("异步2");
  // const p3 = ajax("异步3");

  // p1.then(res1=>{
  //   console.log(res1)
  //   return p2;
  // }).then(res2=>{
  //   console.log(res2)
  //   return p3;
  // }).then(res3=>{
  //   console.log(res3)
  // })
  
  // 批处理方法：
  // 规则：只要有一个子promise实例失败，新promise实例就是失败；全部子promise实例成功，新promise实例才是成功
  // const p = Promise.all([p1, p2, p3])
  // console.log(p);
  // p.then((res)=>{
  //   console.log(res)
  // }).catch(code=>{
  //   console.log(code);
  // })

  // 规则：以第一个结束子promise的状态作为新promise的状态
  // const p = Promise.race([p1, p2, p3]);
  // p.then((res)=>{
  //   console.log(res)
  // }).catch(code=>{
  //   console.log(code);
  // })

  // 规则：只要有一个子promise实例失败，新promise就是失败，全部成功，才是成功
  // const p = Promise.any([p1, p2, p3])
  // p.then((res)=>{
  //   console.log(res)
  // }).catch(code=>{
  //   console.log(code);
  // })
    
  // 规则：所有的子promise实例结束，新promise实例必然为成功，获取所有子promise实例结束后的状态和数据
  // const p = Promise.allSettled([p1, p2, p3])
  // p.then((res)=>{
  //   console.log(res)
  // })


  // ========


  // 测试用：
  // 绝对得到一个成功的promise实例
  const p1 = Promise.resolve("hello");
  p1.then(res=>{
    console.log(res)
  })

  // 绝对得到一个失败的promise实例
  const p2 = Promise.reject("world");
  p2.catch(res=>{
    console.log(res)
  })

  
  function ajax(url){
    return new Promise(( resolve, reject )=>{
      setTimeout(() => {
        resolve(url + " 成功了");
      }, Math.random() * 300);

      setTimeout(() => {
        reject(url + " 失败了");
      }, Math.random() * 500);
    })
  }
</script>
</html>